<?php

namespace common\models\member;

use Yii;

/**
 * This is the model class for table "{{%member}}".
 *
 * @property int $id 主键
 * @property string $ding_unionid 用户钉钉unionid
 * @property string $ding_openid 用户钉钉openid
 * @property string $user_id 用户唯一id
 * @property string $username 帐号
 * @property string $mobile 手机号码
 * @property string $password_hash 密码
 * @property string $auth_key 授权令牌
 * @property string $realname 真实姓名
 * @property string $head_img 头像路径
 * @property string $job_title 职称
 * @property string $password_reset_token 密码重置令牌
 * @property int $gender 性别[0:未知;1:男;2:女]
 * @property string $email 邮箱
 * @property int $visit_count 访问次数
 * @property int $last_time 最后一次登录时间
 * @property string $last_ip 最后一次登录ip
 * @property int $sort 排序（数字越小，越靠前）
 * @property int $status 状态【-1删除、0禁用、1启用】
 * @property int $is_super 是否为超级管理员 【0：否; 1：是超级管理员】
 * @property int $created_at 创建时间
 * @property int $updated_at 修改时间
 */
class Member extends \common\models\BaseModel
{
    const STATUS_DELETE = -1;// 删除
    const STATUS_INVALID = 0;// 失效
    const STATUS_ENABLE = 1;// 正常

    const IS_SUPER_NO = 0;// 超管【否】
    const IS_SUPER_YES = 1;// 超管【是】

    const GENDER_UNKNOW = 0; // 不祥
    const GENDER_MAN = 1; // 男性
    const GENDER_WOMAN = 2;// 女性

    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return '{{%member}}';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['gender', 'visit_count', 'last_time', 'sort', 'status', 'is_super', 'created_at', 'updated_at'], 'integer'],
            [['ding_unionid', 'ding_openid', 'realname', 'job_title'], 'string', 'max' => 50],
            [['user_id', 'last_ip'], 'string', 'max' => 30],
            [['username', 'mobile'], 'string', 'max' => 20],
            [['password_hash', 'password_reset_token'], 'string', 'max' => 150],
            [['auth_key'], 'string', 'max' => 32],
            [['head_img'], 'string', 'max' => 256],
            [['email'], 'string', 'max' => 60],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => '主键',
            'ding_unionid' => '用户钉钉unionid',
            'ding_openid' => '用户钉钉openid',
            'user_id' => '用户唯一id',
            'username' => '帐号',
            'mobile' => '手机号码',
            'password_hash' => '密码',
            'auth_key' => '授权令牌',
            'realname' => '真实姓名',
            'head_img' => '头像路径',
            'job_title' => '职称',
            'password_reset_token' => '密码重置令牌',
            'gender' => '性别[0:未知;1:男;2:女]',
            'email' => '邮箱',
            'visit_count' => '访问次数',
            'last_time' => '最后一次登录时间',
            'last_ip' => '最后一次登录ip',
            'sort' => '排序（数字越小，越靠前）',
            'status' => '状态【-1删除、0禁用、1启用】',
            'is_super' => '是否为超级管理员 【0：否; 1：是超级管理员】',
            'created_at' => '创建时间',
            'updated_at' => '修改时间',
        ];
    }

    /**
     * 场景
     *
     * @return array
     */
    public function scenarios()
    {
        return [
            'backendCreate' => ['username', 'password_hash'],
            'default' => array_keys($this->attributeLabels()),
        ];
    }

    /**
     * 关联账号
     */
    /*public function getAccount()
    {
        return $this->hasOne(Account::class, ['member_id' => 'id']);
    }*/

    public function validatePassword($password)
    {
        return Yii::$app->security->validatePassword($password, $this->password_hash);
    }

    /**
     * @param bool $insert
     * @return bool
     * @throws Exception
     */
    public function beforeSave($insert)
    {
        if ($this->isNewRecord) {
            //$this->last_ip = Yii::$app->request->getUserIP();
            //$this->last_time = time();
            //$this->auth_key = Yii::$app->security->generateRandomString();
        }

        return parent::beforeSave($insert);
    }

    /**
     * @param bool $insert
     * @param array $changedAttributes
     */
    /*public function afterSave($insert, $changedAttributes)
    {
        if ($insert) {
            $account = new Account();
            $account->member_id = $this->id;
            $account->save();
        }

        parent::afterSave($insert, $changedAttributes);
    }*/
}
